三进志
灰色
黑体
0016 十进制数如何转化成二进制数
作者:三进志 浏览:175 评论:0 日期:2022-7-18

十进制数转化成二进制数一般有三种方法。

方法一:
按照二进制规则从一开始累加,一个一个的累加进位,直到加到等于十进制数为止,这种方法效率太低。

方法二:
首先制定一个二进制数数位表(数位的数用十进制数表示),如二进制的“1位”的1就代表1个1,“2位”的1就代表2个1,“4位”的1就代表4个1,“8位”的1就代表8个1,“16位”的1就代表16个1,等等,可以制定到很大的数位数,以便使用,如下表所示:

小数点左边从右至左序号 1 2 3 4 5 6
二进制数数位 1位 2位 3位 4位 5位 6位
二进制数数值 1 1 1 1 1 1
对应十进制数 1 2 4 8 16 32
对应2的幂的形式 2^0 2^1 2^2 2^3 2^4 2^5

如十进制数“35”,可拆分为32+2+1,32对应的二进制数位是第6位就是100000,2对应的二进制数位是第2位就是10,1对应的二进制数位是第1位就是1,将100000与10与1加起来,就是35对应的二进制数100011。这种方法在十进制数比较小的时候还好,当十进制数很大的时候,就不实用了。

方法三(整数部分):
连续除2取余法,直到商的整数部分为0时才停止。举例如下:

被除数÷除数=商的整数部分··加··余数
35÷2=商的整数部分为 17···余数为1
17÷2=商的整数部分为 8 ···余数为1
8 ÷2=商的整数部分为 4 ···余数为0
4 ÷2=商的整数部分为 2 ···余数为0
2 ÷2=商的整数部分为 1 ···余数为0
1 ÷2=商的整数部分为 0 ···余数为1

然后将余数由下往上写,就是100011,这就是35的二进制数。为什么整数部分的二进制数可以这样求得呢?原因如下:
(1)十进制整数都可以百分之百不失真的转化为二进制整数,十进制小数却不一定能百分之百的转化为二进制小数。
(2)二进制整数转十进制数都可以写成如下的形式(从右往左排序):
(第1位数值×2的0次幂)+(第2位数值×2的1次幂)+(第3位数值×2的2次幂)+(第4位数值×2的3次幂)+(第5位数值×2的4次幂)+···(第某位数值×2的某-1次幂)
式子简化为:
(1位值×2^0)+(2位值×2^1)+(3位值×2^2)+(4位值×2^3)+(5位值×2^4)+···(某位值×2^某位值-1)
=(1位值×1)+(2位值×2^1)+(3位值×2^2)+(4位值×2^3)+(5位值×2^4)+···(某位值×2^某-1)
=1位值+(2位值×2)+(3位值×2^2)+(4位值×2^3)+(5位值×2^4)+···(某位值×2^某-1)
在式子中提个公倍数2出来,并只算到第5位,看看有什么规律出来:
=1位值+2(2位值+(3位值×2^1)+(4位值×2^2)+(5位值×2^3))
再提个公倍数2出来:
=1位值+2(2位值+2(3位值+(4位值×2^1)+(5位值×2^2)))
再提个公倍数2出来:
=1位值+2(2位值+2(3位值+2(4位值+(5位值×2^1))))
=1位值+2(2位值+2(3位值+2(4位值+(5位值×2))))
所以,任意一个五位数的二进制整数,转化为十进制数,都可以写成这个式子,其中“1位值”表示的是二进制整数最右边第1位数值,“2位值”表示的是二进制整数从右往左数第2位的数值,其它的“某位值”依此类推。
所以,只要我们将“1位值”“2位值”“3位值”等等这些“位值”求出来,就可以化成二进制数了。
因为整数由奇数和偶数组成,
偶数除以2,余数总为0,
奇数除以2,商不计算到小数位只计算整数位时,余数总为1,
分析下面这个式子:
1位值+2(2位值+2(3位值+2(4位值+(5位值×2))))
其中:
(2位值+2(3位值+2(4位值+(5位值×2))))
可以用“一个整数”代替,于是,式子简化为:
=1位值+2(一个整数)
而“2×(一个整数)”总是个偶数,偶数除以2,余数总为0,
“1位值”是一个二进制数值,不是1就是0,1除以2,整数位余数还是1,0除以2,整数位余数还是0。
所以二进制数值除以2,整数位余数还是其本身,
于是:
(1位值+2(一个整数))÷2
=(1位值)÷2+2(一个整数)÷2
因为:
(1位值)÷2 的余数还是(1位值)
2(一个整数)÷2 的余数总是0
所以:
(1位值+2(一个整数))÷2
的余数就是:“1位值+0 ”
结果就是:“1位值”
所以一个十进制数第1次除以2,其余数就是二进制的第一位数值。
再看这个式子:
1位值+2(2位值+2(3位值+2(4位值+(5位值×2))))
其中“1位值”在第1次除2取余已经算出来了,
而现在的商是:
2位值+2(3位值+2(4位值+(5位值×2)))
将:3位值+2(4位值+(5位值×2))
用“一个整数”代替,于是,式子简化为:
2位值+2(一个整数)
第二次除以2取余,余数就是“2位值”,道理和第一次除以2时一样。
现在的商是:
3位值+2(4位值+(5位值×2))
第三次除以2取余,余数就是“3位值”,道理同上。
现在的商是:
4位值+(5位值×2)
第四次除以2取余,余数就是“4位值”,道理同上。
现在的商是:
5位值
所以,当连续除以2,其整数位的商为1时,可以停止了,这个“商1”就是这个二进制数的最高位了,然后逆序将全部余数写上,这样,十进制整数就转化为二进制数了。

方法三(小数部分):
第一种方法:
因为小数是由分数变化而来,分数是两个整数相除,于是将十进制小数,化成两个整数相除,再将这两个整数化成二进制数,再用二进制数除以二进制数,来获得二进制小数。
如十进制小数:0.1 ,可化为: 1除以10,
十进制数1的二进制数还是1,
十进制数10的二进制数是1010,
再用二进制数1除以1010,
其结果就是0.00011001100···1100···,是个二进制无限循环小数。

第二种方法:
同底数幂相除,底数不变,指数相减。
如:2的1次幂,除以,2的2次幂,等于2的-1次幂,也等于二分之一,正好是二进制小数的2分位。2的-2次幂,等于四分之一,正好是二进制小数的4分位,等等。所以,可以用2的负幂的形式来代表二进制小数的位权,如下表所示:

小数点右边从左至右序号 1 2 3 4
二进制小数数位 2分位 4分位 8分位 16分位
二进制小数数值 1 1 1 1
二进制小数数位的权重 2 4 8 16
对应2的负幂的形式 2^-1 2^-2 2^-3 2^-4

所以二进制小数转十进制小数可以写成如下的形式:
(第1位数值×2的-1次幂)+(第2位数值×2的-2次幂)+(第3位数值×2的-3次幂)+(第4位数值×2的-4次幂)+(第5位数值×2的-5次幂)+···(第某位数值×2的负某次幂)
为方便起见,只算到小数点右边第5位,式子如下:
(1位值×2^-1)+(2位值×2^-2)+(3位值×2^-3)+(4位值×2^-4)+(5位值×2^-5)
提一个公倍数“2^-1”出来,式子变成如下:
2^-1(1位值+(2位值×2^-1)+(3位值×2^-2)+(4位值×2^-3)+(5位值×2^-4))
再在其中提一个公倍数“2^-1”出来,式子变成如下:
2^-1(1位值+2^-1(2位值+(3位值×2^-1)+(4位值×2^-2)+(5位值×2^-3)))
再在其中提一个公倍数“2^-1”出来,式子变成如下:
2^-1(1位值+2^-1(2位值+2^-1(3位值+(4位值×2^-1)+(5位值×2^-2))))
再在其中提一个公倍数“2^-1”出来,式子变成如下:
2^-1(1位值+2^-1(2位值+2^-1(3位值+2^-1(4位值+(5位值×2^-1)))))
其中“1位值”就是二进制小数点右边第1位,
其中“2位值”就是二进制小数点右边第2位,
其中“3位值”就是二进制小数点右边第3位,
等等,其它“第几位值”依此类推,就是二进制小数点右边第几位。
所以,只要我们将“1位值”“2位值”“3位值”等等这些“位值”求出来,就可以化成二进制小数了。

假设,某个十进制小数可以写成如下二进制小数表示:
2^-1(1位值+2^-1(2位值+2^-1(3位值+2^-1(4位值+(5位值×2^-1)))))
那么,上面这个式子除以2的负1次幂(2^-1),也就是乘以2,就会得到如下式子:
1位值+2^-1(2位值+2^-1(3位值+2^-1(4位值+(5位值×2^-1))))
而式子:“2^-1(2位值+2^-1(3位值+2^-1(4位值+(5位值×2^-1))))”的和,永远是一个小于1的纯小数。因为假设二进制数位的值都取最大的1,那么“2^-1(4位值+(5位值×2^-1))”
就等于:1/2(1+(1×1/2))=3/4,类似这样的式子:1加一个小于1的纯小数再除以2,永远都是一个小于1的纯小数。因为1加一个纯小数的和永远都小于2,用小于2并且大于等于0的小数再除以2,商永远是一个小于1的纯小数。
所以,如下式子:
1位值+2^-1(2位值+2^-1(3位值+2^-1(4位值+(5位值×2^-1))))
就可以写成:
1位值+(一个小于1的纯小数)
因为二进制“位值”不是1就是0,
这就相当于是:整数位+(一个小于1的纯小数)
所以:
十进制纯小数第1次乘以2后,整数位是几,二进制的“1位值”就是几,
然后,将第1次乘以2后的积的整数位变成0,第2次再乘以2,整数位是几,二进制的“2位值”就是几,
然后,将第2次乘以2后的积的整数位变成0,第3次再乘以2,整数位是几,二进制的“3位值”就是几,
依此类推,直乘到小数位全部乘完为0了为止。如果小数位永远也乘不完永远不为0,那就是这个十进制小数不能百分之百完全不失真的转化为二进制小数了。

举例说明,十进制小数“0.1”如何转化为二进制小数:

1    0.1×2=0.2
整数位是0,二进制的“1位值”就是0,

2    0.2×2=0.4
整数位是0,二进制的“2位值”就是0,

3    0.4×2=0.8
整数位是0,二进制的“3位值”就是0,

4    0.8×2=1.6
整数位是1,二进制的“4位值”就是1,

将1.6的整数位归0,变成0.6
5    0.6×2=1.2
整数位是1,二进制的“5位值”就是1,

将1.2的整数位归0,变成0.2
6    0.2×2=0.4
整数位是0,二进制的“6位值”就是0,

7    0.4×2=0.8
整数位是0,二进制的“7位值”就是0,

8    0.8×2=1.6
整数位是1,二进制的“8位值”就是1,

将1.6的整数位归0,变成0.6
9    0.6×2=1.2
整数位是1,二进制的“9位值”就是1,

将1.2的整数位归0,变成0.2
10    0.2×2=0.4
整数位是0,二进制的“10位值”就是0,

只乘到第10个2,就可以看出,
十进制小数0.1转化为二进制小数是:
0.0 0011 0011 0011···
是一个以0011为循环节的二进制无限小数
所以进制数与进制数之间的转换,有些数并不是百分之百不失真的对应关系。

0条评论 0/0页
我要评论
目前还没有评论!
评论人:(长度为2到10个字,且不能为敏感词)
电子邮箱:(您的电子邮箱地址不会被公开)
评论内容:(长度为2到1000个字之间)
验证码:(点击验证码输入框,可更换验证码)